<html>
<head>
<meta charset="utf-8"></meta>
<title>BScript</title>
<link href="./style.css" rel="stylesheet" type="text/css"/>
	</head>
<body>
		<div class="class" name="BScript">
<h1>BScript</h1>
<p>继承自<a href="BObject.html">BObject</a></p>
			<p id="resume">BScript为脚本类，其语法类似C++，是面向对象的脚本语言。<a href="#desc">详细</a></p><h2>public</h2>
<table id="public">
<tr><td align="right"/><td><a href="#BScript()">BScript</a>();</td></tr>
<tr><td align="right"/><td><a href="#BScript(const BString&)">BScript</a>(const BString&amp; name);</td></tr>
<tr><td align="right"/><td><a href="#~BScript()">~BScript</a>();</td></tr>
<tr><td align="right">virtual void </td><td><a href="#copy(const BScript*)">copy</a>(const BScript* other);</td></tr>
<tr><td align="right">virtual BScript* </td><td><a href="#clone() const">clone</a>() const;</td></tr>
<tr><td align="right">void </td><td><a href="#setPath(const BString&)">setPath</a>(const BString&amp; path);</td></tr>
<tr><td align="right">const BString&amp; </td><td><a href="#path() const">path</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#insertSource(BSource*)">insertSource</a>(BSource* source);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeSource(BSource*)">removeSource</a>(BSource* source);</td></tr>
<tr><td align="right">bool </td><td><a href="#containSource(const BSource*)">containSource</a>(const BSource* source);</td></tr>
<tr><td align="right">bool </td><td><a href="#clearSources()">clearSources</a>();</td></tr>
<tr><td align="right">int </td><td><a href="#sourceCount() const">sourceCount</a>() const;</td></tr>
<tr><td align="right">BSource* </td><td><a href="#source(int)">source</a>(int index);</td></tr>
<tr><td align="right">const BSource* </td><td><a href="#source(int) const">source</a>(int index) const;</td></tr>
<tr><td align="right">BSource* </td><td><a href="#source(const BString&)">source</a>(const BString&amp; name);</td></tr>
<tr><td align="right">const BSource* </td><td><a href="#source(const BString&) const">source</a>(const BString&amp; name) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#insertIncludePath(const BString&)">insertIncludePath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeIncludePath(const BString&)">removeIncludePath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#containIncludePath(const BString&)">containIncludePath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#clearIncludePaths()">clearIncludePaths</a>();</td></tr>
<tr><td align="right">int </td><td><a href="#includePathCount() const">includePathCount</a>() const;</td></tr>
<tr><td align="right">const BString&amp; </td><td><a href="#includePath(int) const">includePath</a>(int index) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#insertImportPath(const BString&)">insertImportPath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeImportPath(const BString&)">removeImportPath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#containImportPath(const BString&)">containImportPath</a>(const BString&amp; includePath);</td></tr>
<tr><td align="right">bool </td><td><a href="#clearImportPaths()">clearImportPaths</a>();</td></tr>
<tr><td align="right">int </td><td><a href="#importPathCount() const">importPathCount</a>() const;</td></tr>
<tr><td align="right">const BString&amp; </td><td><a href="#importPath(int) const">importPath</a>(int index) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#registEnum(BEnum*)">registEnum</a>(BEnum* enm);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistEnum(BEnum*)">unregistEnum</a>(BEnum* enm);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistEnum(const BString&)">unregistEnum</a>(const BString&amp; type);</td></tr>
<tr><td align="right">int </td><td><a href="#registedEnumCount() const">registedEnumCount</a>() const;</td></tr>
<tr><td align="right">BEnum* </td><td><a href="#registedEnum(int)">registedEnum</a>(int index);</td></tr>
<tr><td align="right">const BEnum* </td><td><a href="#registedEnum(int) const">registedEnum</a>(int index) const;</td></tr>
<tr><td align="right">BEnum* </td><td><a href="#registedEnum(const BString&)">registedEnum</a>(const BString&amp; type);</td></tr>
<tr><td align="right">const BEnum* </td><td><a href="#registedEnum(const BString&) const">registedEnum</a>(const BString&amp; type) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#registClass(BClass*)">registClass</a>(BClass* cls);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistClass(BClass*)">unregistClass</a>(BClass* cls);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistClass(const BString&)">unregistClass</a>(const BString&amp; type);</td></tr>
<tr><td align="right">int </td><td><a href="#registedClassCount() const">registedClassCount</a>() const;</td></tr>
<tr><td align="right">BClass* </td><td><a href="#registedClass(int)">registedClass</a>(int index);</td></tr>
<tr><td align="right">const BClass* </td><td><a href="#registedClass(int) const">registedClass</a>(int index) const;</td></tr>
<tr><td align="right">BClass* </td><td><a href="#registedClass(const BString&)">registedClass</a>(const BString&amp; type);</td></tr>
<tr><td align="right">const BClass* </td><td><a href="#registedClass(const BString&) const">registedClass</a>(const BString&amp; type) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#registFunction(const BString&, Function)">registFunction</a>(const BString&amp; declare, Function function);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistFunction(Function)">unregistFunction</a>(Function function);</td></tr>
<tr><td align="right">bool </td><td><a href="#unregistFunction(const BString&)">unregistFunction</a>(const BString&amp; name);</td></tr>
<tr><td align="right">int </td><td><a href="#registedFunctionCount() const">registedFunctionCount</a>() const;</td></tr>
<tr><td align="right">Function </td><td><a href="#registedFunction(int) const">registedFunction</a>(int index) const;</td></tr>
<tr><td align="right">Function </td><td><a href="#registedFunction(int, BString&) const">registedFunction</a>(int index, BString&amp; name) const;</td></tr>
<tr><td align="right">Function </td><td><a href="#registedFunction(int, BString&, BString&) const">registedFunction</a>(int index, BString&amp; type, BString&amp; name) const;</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#createVariant(const char*, const char*)">createVariant</a>(const char* type, const char* name);</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#createVariant(const BString&, const BString&)">createVariant</a>(const BString&amp; type, const BString&amp; name);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeVariant(const char*)">removeVariant</a>(const char* name);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeVariant(const BString&)">removeVariant</a>(const BString&amp; name);</td></tr>
<tr><td align="right">int </td><td><a href="#variantCount() const">variantCount</a>() const;</td></tr>
<tr><td align="right">BValue&amp; </td><td><a href="#variant(int)">variant</a>(int index);</td></tr>
<tr><td align="right">BValue&amp; </td><td><a href="#variant(int, BString&, BString&)">variant</a>(int index, BString&amp; type, BString&amp; name);</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#variant(int) const">variant</a>(int index) const;</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#variant(int, BString&, BString&) const">variant</a>(int index, BString&amp; type, BString&amp; name) const;</td></tr>
<tr><td align="right">void </td><td><a href="#setDebugging(bool)">setDebugging</a>(bool debugging);</td></tr>
<tr><td align="right">bool </td><td><a href="#debugging() const">debugging</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#insertBreakpoint(const BString&)">insertBreakpoint</a>(const BString&amp; breakpoint);</td></tr>
<tr><td align="right">bool </td><td><a href="#removeBreakpoint(const BString&)">removeBreakpoint</a>(const BString&amp; breakpoint);</td></tr>
<tr><td align="right">bool </td><td><a href="#containBreakpoint(const BString&)">containBreakpoint</a>(const BString&amp; breakpoint);</td></tr>
<tr><td align="right">bool </td><td><a href="#checkBreakpoint(const BString&)">checkBreakpoint</a>(const BString&amp; breakpoint);</td></tr>
<tr><td align="right">bool </td><td><a href="#clearBreakpoints()">clearBreakpoints</a>();</td></tr>
<tr><td align="right">int </td><td><a href="#breakpointCount() const">breakpointCount</a>() const;</td></tr>
<tr><td align="right">const BString&amp; </td><td><a href="#breakpoint(int) const">breakpoint</a>(int index) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#compile()">compile</a>();</td></tr>
<tr><td align="right">bool </td><td><a href="#reset()">reset</a>();</td></tr>
<tr><td align="right">bool </td><td><a href="#call(const BString&, int, BValue*)">call</a>(const BString&amp; name, int argc, BValue* argv);</td></tr>
<tr><td align="right">bool </td><td><a href="#debug(const BString&)">debug</a>(const BString&amp; command);</td></tr>
<tr><td align="right">bool </td><td><a href="#create(const BString&, BValue&,const BValue&)">create</a>(const BString&amp; type, BValue&amp; value, const BValue&amp; param = BValue());</td></tr>
<tr><td align="right">bool </td><td><a href="#error() const">error</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#inited() const">inited</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#breaked() const">breaked</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#running() const">running</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#stop() const">stop</a>() const;</td></tr>
<tr><td align="right">bool </td><td><a href="#clean()">clean</a>();</td></tr>
<tr><td align="right">const BString&amp; </td><td><a href="#message() const">message</a>() const;</td></tr>
<tr><td align="right">int </td><td><a href="#functionCount() const">functionCount</a>() const;</td></tr>
<tr><td align="right">const BExp* </td><td><a href="#function(int) const">function</a>(int index) const;</td></tr>
<tr><td align="right">const BExp* </td><td><a href="#function(int, BString&) const">function</a>(int index, BString&amp; name) const;</td></tr>
<tr><td align="right">const BExp* </td><td><a href="#function(int, BString&, BString&) const">function</a>(int index, BString&amp; type, BString&amp; name) const;</td></tr>
<tr><td align="right">BEnum* </td><td><a href="#findEnum(const BString&)">findEnum</a>(const BString&amp; type);</td></tr>
<tr><td align="right">const BEnum* </td><td><a href="#findEnum(const BString&) const">findEnum</a>(const BString&amp; type) const;</td></tr>
<tr><td align="right">BClass* </td><td><a href="#findClass(const BString&)">findClass</a>(const BString&amp; type);</td></tr>
<tr><td align="right">const BClass* </td><td><a href="#findClass(const BString&) const">findClass</a>(const BString&amp; type) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#setValue(const BString&, const BValue&)">setValue</a>(const BString&amp; path, const BValue&amp; value);</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#value(const BString&)">value</a>(const BString&amp; path);</td></tr>
<tr><td align="right">int </td><td><a href="#stackCapacity() const">stackCapacity</a>() const;</td></tr>
<tr><td align="right">int </td><td><a href="#stackSize() const">stackSize</a>() const;</td></tr>
<tr><td align="right">BValue&amp; </td><td><a href="#stack(int)">stack</a>(int index);</td></tr>
<tr><td align="right">BValue&amp; </td><td><a href="#stack(int, BString&, BString&)">stack</a>(int index, BString&amp; type, BString&amp; name);</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#stack(int) const">stack</a>(int index) const;</td></tr>
<tr><td align="right">const BValue&amp; </td><td><a href="#stack(int, BString&, BString&) const">stack</a>(int index, BString&amp; type, BString&amp; name) const;</td></tr>
<tr><td align="right">bool </td><td><a href="#setSequence(const BExpHolderArray&)">setSequence</a>(const BExpHolderArray&amp; sequence);</td></tr>
<tr><td align="right">const BExpHolderArray&amp; </td><td><a href="#sequence() const">sequence</a>() const;</td></tr>
<tr><td align="right">using </td><td><a href="#BObject::query;()">BObject::query;</a></td></tr>
<tr><td align="right">virtual bool </td><td><a href="#query(const BString&, BValue&) const">query</a>(const BString&amp; text, BValue&amp; value) const;</td></tr>
			</table>
<div id="desc">
<h2>详细介绍：</h2>
				<p>BScript为脚本类，其语法类似C++，是面向对象的脚本语言。一个脚本对象可以包含若干源码对象（<a href="BSource.html" src="BSource.html">BSource</a>），对源码进行编辑后会生成执行码序列（Sequence），之后可以使用方法pcall()使用脚本运行。</p><p>约定代码文件扩展名为.bcs或.cs，头文件扩展名为.h。脚本文件一般存储为单个对象文件，如obc或osc文件。</p><h4>基础数值类型</h4><p>不支持无符号类型，如下表：<br/>
					<table>
						<tr><td>auto</td><td>自动类型，根据语句语义获得类型。获得的类型不是必须为元类型。</td></tr>
						<tr><td>bool</td><td>布尔类型，值为true和false。</td></tr>
						<tr><td>char</td><td>单个字节有符号值。</td></tr>
						<tr><td>short</td><td>两个字节有符号值。</td></tr>
						<tr><td>int</td><td>四个字节有符号整数值。</td></tr>
						<tr><td>long</td><td>八个字节有符号整数值。</td></tr>
						<tr><td>real</td><td>四个字节或八个字节的实数值，其实际大小取决于编译的BReal定义。</td></tr>
						<tr><td>float</td><td>四个字节实数值，世人常称其为单精度浮点数。</td></tr>
						<tr><td>double</td><td>八个字节实数值，世人都称其为双精度浮点数。</td></tr>
						<tr><td>string</td><td>字符串类型，脚本中没有char*这个说法，写为"xxx"也会被作为string。</td></tr>
					</table></p><h4>基础容器类</h4><p>脚本支持若干容器的实例化使用，但不支持编写模板类。各个容器类如下：<br/><table>
						<tr><td>Array</td><td>数组模板类，其类的资产为BValueArray类型数据。<br/>脚本中类似"int ia[3];"会实例化为Array&lt;int&gt; ia,<br/>注意：数组中的数据都是BValue，而不针对特定类型。</td></tr><p/></table></p>
				<p> 上表所列的各个容器的元素类型都是BValue，这是为了与整体的脚本环境相统一。
					<pre>BValue value;
if(script-&gt;create("Array&lt;real&gt;", value))
{
	BClass* cls = value;
	BValueArray* array = cls-&gt;asset();
}
					</pre>
					<p>如上面的示例代码，value用于存放创建的数据，数据是一个BClass对象，这个对象的资产是数组容器。</p>
				</p><h4>自定义类</h4><p>自定义类以及向脚本中注册类是很常用的。脚本代码中定义的类与注册的类是同等的。自定义类需要继承BClass类，在BClass初始化参数中指定脚本类的名称，以及是否为元类型。 
					<br/><p>若指定为元类型则此类对象不会以BClass对象存在的类，如int类型，其存在于BValue中的实际值为int本身，而非元类型都是以BClass对象存在于BValue之中。注意：元类的方法中this是0，因为不需要实体对象。没有实体对象（BClass* this）自然无法取得当前的脚本（this-&gt;script()），所以模板类都是非元类型的。</p><p>类定义完成后，可使用方法registClass()进行注册，需要注意的是一个类可以被注册到多个脚本对象中。若类不是元类型，那么在运行时通过类的clone()方法生成对象，所以需要注意对clone()方法的重载。</p><p>下面代码示例创建一个自定义颜色类型，其为元类型：</p><pre>class ClassColor : public BClass
{
	ClassColor() : BClass("Color", true)
	{
		this-&gt;insertMethod("Color()", &amp;amp;ClassColor::create);
		this-&gt;insertMethod("set(byte,byte,byte,byte)", &amp;amp;ClassColor::set_r_g_b_a);
	}
	void ClassColor::create(int argc, BValue* argv)
	{
		argv[0] = BColor();
	}
	void ClassColor::set_r_g_b_a(int argc, BValue* argv)
	{
		BColor&amp;amp; color = argv[0];
		byte r = argv[1];
		byte g = argv[2];
		byte b = argv[3];
		byte a = argv[4];
		bool ret = color.set(r, g, b, a);
		argv[0] = ret;
	}

}
script-&gt;registClass(new ClassColor());					
					
					</pre><h4>注册函数：</h4><p>使用方法registFunction(descript, function)进行函数注册。<br/>第一个参数是描述此函数的形式，与C++函数声明的语法一致，但不能指定参数名称和默认参数值。<br/>第二个能数是C++函数的指针，函数定义的格式如下示例：</p><pre>void func_name(int argc, BValue* argv)
{
	//argc：指示参数的数量。
	//argv：指示参数的数据。
	BScript* script = argv[0];
	int num1 = argv[1];//第一个参数。
	float num2 = argv[2];//第二个参数。
}
					
					</pre><p>如上代码所示，函数应该没有返回值，因为其返回值会被忽略，注册的函数必须正确执行。若函数可以在运行时出错，那么脚本运行的状态判断将会变得很混乱。<br/>函数的第一个参数是参数的数量，其值应该比实际参数多一个，argv指示参数数据表。其中argv[0]为环境脚本对象（BScript），且在函数结束后argv[0]会被作为函数返回值，若没有返回值则会被忽略。<br/>由argv[1]开始为具体参数值。</p><p>由上所述可以看出，函数总是可以取得运行时脚本对象的，这是因为函数没有主体对象，作为环境脚本可以扩展其功能。但元类是有主体对象的，但其主体不是BClass对象，所以元类的方法总是无法得到环境脚本对象的。</p><p>无论是类的方法还是函数其C++实现的形式都是一样的，即：void func/method(int argc, BValue* argv)。都没有返回值，参数数量比实际参数多一个，参数argv[0]总是返回值。</p><h4>信号表：</h4><table>
						<tr><td>Signal_PathChanged</td><td>路径改变时发出，值为：BString path。</td></tr>
						<tr><td>Signal_Insert</td><td>加入一个源代码对象时发出，值为：BSource* source，附件是BScript* scritp = this。</td></tr>
						<tr><td>Signal_Remove</td><td>移除一个源代码对象时发出，值为：BSource* source，附件是BScript* script = this。</td></tr>
						<tr><td>Signal_Clear</td><td>当清空所有源代码操作完成时发出，无值。</td></tr>
						<tr><td>Signal_Changed</td><td>包含路径或导入路径改变时发出，无值。</td></tr>
						<tr><td>Signal_Analyse</td><td>在编译过程中解析到某个源码对象时发出，值为：BSource* source。</td></tr>
						<tr><td>Signal_Compiled</td><td>当编译完成时发出，值为编译过程中产生的消息：BString message。</td></tr>
						<tr><td>Signal_Error</td><td>运行时出错或注册类操作错误时发出，值为：BString errorStr。</td></tr>
						<tr><td>Signal_Message</td><td>解析代码错误，值为：BString message。</td></tr>
						<tr><td>Signal_CurrentChanged</td><td>执行过程中当前指令改变时发出，值为指令的位置：int current。</td></tr>
						<tr><td>Signal_Performed</td><td>当执行完一条指令时发出，值为执行过的指令数量：int counter。</td></tr>
						<tr><td>Signal_Inited</td><td>当运行到初始化完成时发出，值为当前栈顶位置：int global。</td></tr></table>
				</p>
			</div>
<h2 id="docs">成员文档：</h2>
<div id="BScript()">
<h3>BScript();</h3>
				<p>初始化脚本对象。</p>
			</div>
<div id="BScript(const BString&)">
<h3>BScript(const BString&amp; name);</h3>
				<p>初始化脚本对象，同时指定名称。</p>
			</div>
<div id="~BScript()">
<h3>~BScript();</h3>
				<p>析构脚本对象。</p>
			</div>
<div id="copy(const BScript*)">
<h3>virtual void copy(const BScript* other);</h3>
				<p>将别的脚本内容拷贝到本脚本，几乎是所有数据。</p>
			</div>
<div id="clone() const">
<h3>virtual BScript* clone() const;</h3>
				<p>创建一个新脚本对象，并拷贝此脚本的所有内容。</p>
			</div>
<div id="setPath(const BString&)">
<h3>void setPath(const BString&amp; path);</h3>
				<p>设置脚本路径，源码对象的文件名若不是绝对路径，那么应该是相对于此路径的。</p>
			</div>
<div id="path() const">
<h3>const BString&amp; path() const;</h3>
				<p>获取脚本工作路径。</p>
			</div>
<div id="insertSource(BSource*)">
<h3>bool insertSource(BSource* source);</h3>
				<p>向脚本中添加一个源码对象，如果添加成功发出Signal_Insert，且源码被标记为此脚本。</p>
			</div>
<div id="removeSource(BSource*)">
<h3>bool removeSource(BSource* source);</h3>
				<p>从此脚本中删除一个源码对象，若干删除成功发出Signal_Remove，且源码被标记为无脚本。</p>
			</div>
<div id="containSource(const BSource*)">
<h3>bool containSource(const BSource* source);</h3>
			</div>
<div id="clearSources()">
<h3>bool clearSources();</h3>
			</div>
<div id="sourceCount() const">
<h3>int sourceCount() const;</h3>
			</div>
<div id="source(int)">
<h3>BSource* source(int index);</h3>
			</div>
<div id="source(int) const">
<h3>const BSource* source(int index) const;</h3>
			</div>
<div id="source(const BString&)">
<h3>BSource* source(const BString&amp; name);</h3>
			</div>
<div id="source(const BString&) const">
<h3>const BSource* source(const BString&amp; name) const;</h3>
			</div>
<div id="insertIncludePath(const BString&)">
<h3>bool insertIncludePath(const BString&amp; includePath);</h3>
			</div>
<div id="removeIncludePath(const BString&)">
<h3>bool removeIncludePath(const BString&amp; includePath);</h3>
			</div>
<div id="containIncludePath(const BString&)">
<h3>bool containIncludePath(const BString&amp; includePath);</h3>
			</div>
<div id="clearIncludePaths()">
<h3>bool clearIncludePaths();</h3>
			</div>
<div id="includePathCount() const">
<h3>int includePathCount() const;</h3>
			</div>
<div id="includePath(int) const">
<h3>const BString&amp; includePath(int index) const;</h3>
			</div>
<div id="insertImportPath(const BString&)">
<h3>bool insertImportPath(const BString&amp; includePath);</h3>
			</div>
<div id="removeImportPath(const BString&)">
<h3>bool removeImportPath(const BString&amp; includePath);</h3>
			</div>
<div id="containImportPath(const BString&)">
<h3>bool containImportPath(const BString&amp; includePath);</h3>
			</div>
<div id="clearImportPaths()">
<h3>bool clearImportPaths();</h3>
			</div>
<div id="importPathCount() const">
<h3>int importPathCount() const;</h3>
			</div>
<div id="importPath(int) const">
<h3>const BString&amp; importPath(int index) const;</h3>
			</div>
<div id="registEnum(BEnum*)">
<h3>bool registEnum(BEnum* enm);</h3>
			</div>
<div id="unregistEnum(BEnum*)">
<h3>bool unregistEnum(BEnum* enm);</h3>
			</div>
<div id="unregistEnum(const BString&)">
<h3>bool unregistEnum(const BString&amp; type);</h3>
			</div>
<div id="registedEnumCount() const">
<h3>int registedEnumCount() const;</h3>
			</div>
<div id="registedEnum(int)">
<h3>BEnum* registedEnum(int index);</h3>
			</div>
<div id="registedEnum(int) const">
<h3>const BEnum* registedEnum(int index) const;</h3>
			</div>
<div id="registedEnum(const BString&)">
<h3>BEnum* registedEnum(const BString&amp; type);</h3>
			</div>
<div id="registedEnum(const BString&) const">
<h3>const BEnum* registedEnum(const BString&amp; type) const;</h3>
			</div>
<div id="registClass(BClass*)">
<h3>bool registClass(BClass* cls);</h3>
<p>注册一个模块类，此类将作为脚本模块被使用。注册后可以使用create()方法新建此类的对象。</p><p>注意：一个类可以被注册为多个脚本的模块类，注册操作不会为类赋予脚本对象。</p>
			</div>
<div id="unregistClass(BClass*)">
<h3>bool unregistClass(BClass* cls);</h3>
<p>注销一个模块类。注销后使用create()方法将无法新建此类的对象。</p>
			</div>
<div id="unregistClass(const BString&)">
<h3>bool unregistClass(const BString&amp; type);</h3>
<p>注销一个名称为type的模块类。注销后使用create()方法将无法新建此类的对象。</p>
			</div>
<div id="registedClassCount() const">
<h3>int registedClassCount() const;</h3>
			</div>
<div id="registedClass(int)">
<h3>BClass* registedClass(int index);</h3>
			</div>
<div id="registedClass(int) const">
<h3>const BClass* registedClass(int index) const;</h3>
			</div>
<div id="registedClass(const BString&)">
<h3>BClass* registedClass(const BString&amp; type);</h3>
			</div>
<div id="registedClass(const BString&) const">
<h3>const BClass* registedClass(const BString&amp; type) const;</h3>
			</div>
<div id="registFunction(const BString&, Function)">
<h3>bool registFunction(const BString&amp; declare, Function function);</h3>
			</div>
<div id="unregistFunction(Function)">
<h3>bool unregistFunction(Function function);</h3>
			</div>
<div id="unregistFunction(const BString&)">
<h3>bool unregistFunction(const BString&amp; name);</h3>
			</div>
<div id="registedFunctionCount() const">
<h3>int registedFunctionCount() const;</h3>
			</div>
<div id="registedFunction(int) const">
<h3>Function registedFunction(int index) const;</h3>
			</div>
<div id="registedFunction(int, BString&) const">
<h3>Function registedFunction(int index, BString&amp; name) const;</h3>
			</div>
<div id="registedFunction(int, BString&, BString&) const">
<h3>Function registedFunction(int index, BString&amp; type, BString&amp; name) const;</h3>
			</div>
<div id="createVariant(const char*, const char*)">
<h3>const BValue&amp; createVariant(const char* type, const char* name);</h3>
			</div>
<div id="createVariant(const BString&, const BString&)">
<h3>const BValue&amp; createVariant(const BString&amp; type, const BString&amp; name);</h3>
			</div>
<div id="removeVariant(const char*)">
<h3>bool removeVariant(const char* name);</h3>
			</div>
<div id="removeVariant(const BString&)">
<h3>bool removeVariant(const BString&amp; name);</h3>
			</div>
<div id="variantCount() const">
<h3>int variantCount() const;</h3>
			</div>
<div id="variant(int)">
<h3>BValue&amp; variant(int index);</h3>
			</div>
<div id="variant(int, BString&, BString&)">
<h3>BValue&amp; variant(int index, BString&amp; type, BString&amp; name);</h3>
			</div>
<div id="variant(int) const">
<h3>const BValue&amp; variant(int index) const;</h3>
			</div>
<div id="variant(int, BString&, BString&) const">
<h3>const BValue&amp; variant(int index, BString&amp; type, BString&amp; name) const;</h3>
			</div>
<div id="setDebugging(bool)">
<h3>void setDebugging(bool debugging);</h3>
			</div>
<div id="debugging() const">
<h3>bool debugging() const;</h3>
			</div>
<div id="insertBreakpoint(const BString&)">
<h3>bool insertBreakpoint(const BString&amp; breakpoint);</h3>
			</div>
<div id="removeBreakpoint(const BString&)">
<h3>bool removeBreakpoint(const BString&amp; breakpoint);</h3>
			</div>
<div id="containBreakpoint(const BString&)">
<h3>bool containBreakpoint(const BString&amp; breakpoint);</h3>
			</div>
<div id="checkBreakpoint(const BString&)">
<h3>bool checkBreakpoint(const BString&amp; breakpoint);</h3>
			</div>
<div id="clearBreakpoints()">
<h3>bool clearBreakpoints();</h3>
			</div>
<div id="breakpointCount() const">
<h3>int breakpointCount() const;</h3>
			</div>
<div id="breakpoint(int) const">
<h3>const BString&amp; breakpoint(int index) const;</h3>
			</div>
<div id="compile()">
<h3>bool compile();</h3>
<p>执行编译工作，将清空所有数据，分别对每一个源码对象进行解析，再进行整合和链接。</p>
			</div>
<div id="reset()">
<h3>bool reset();</h3>
<p>重置所有运行时数据，主要栈清空。</p>
			</div>
<div id="call(const BString&, int, BValue*)">
<h3>bool call(const BString&amp; name, int argc, BValue* argv);</h3>
			</div>
<div id="debug(const BString&)">
<h3>bool debug(const BString&amp; command);</h3>
			</div>
<div id="create(const BString&, BValue&,const BValue&)">
<h3>bool create(const BString&amp; type, BValue&amp; value, const BValue&amp; param = BValue());</h3>
<p>按指定的类型创建一个数据，并把新数据放进value中，如果给参考值param那么进行数据拷贝。</p><p>注意：当创建的元类型数据，那么vaue中存放的是直接数据，如：类型为int，那么值也是类型int。当指定的类型为非元类型，那么value中存放的是BClass对象，如：类型为Array&lt;int&gt;，那么值类型为BClass* obj，使用BValueArray* array = obj-&gt;asset();取得实际数据。</p>
			</div>
<div id="error() const">
<h3>bool error() const;</h3>
			</div>
<div id="inited() const">
<h3>bool inited() const;</h3>
			</div>
<div id="breaked() const">
<h3>bool breaked() const;</h3>
			</div>
<div id="running() const">
<h3>bool running() const;</h3>
			</div>
<div id="stop() const">
<h3>bool stop() const;</h3>
			</div>
<div id="clean()">
<h3>bool clean();</h3>
			</div>
<div id="message() const">
<h3>const BString&amp; message() const;</h3>
			</div>
<div id="functionCount() const">
<h3>int functionCount() const;</h3>
			</div>
<div id="function(int) const">
<h3>const BExp* function(int index) const;</h3>
			</div>
<div id="function(int, BString&) const">
<h3>const BExp* function(int index, BString&amp; name) const;</h3>
			</div>
<div id="function(int, BString&, BString&) const">
<h3>const BExp* function(int index, BString&amp; type, BString&amp; name) const;</h3>
			</div>
<div id="findEnum(const BString&)">
<h3>BEnum* findEnum(const BString&amp; type);</h3>
			</div>
<div id="findEnum(const BString&) const">
<h3>const BEnum* findEnum(const BString&amp; type) const;</h3>
			</div>
<div id="findClass(const BString&)">
<h3>BClass* findClass(const BString&amp; type);</h3>
			</div>
<div id="findClass(const BString&) const">
<h3>const BClass* findClass(const BString&amp; type) const;</h3>
			</div>
<div id="setValue(const BString&, const BValue&)">
<h3>bool setValue(const BString&amp; path, const BValue&amp; value);</h3>
			</div>
<div id="value(const BString&)">
<h3>const BValue&amp; value(const BString&amp; path);</h3>
			</div>
<div id="stackCapacity() const">
<h3>int stackCapacity() const;</h3>
			</div>
<div id="stackSize() const">
<h3>int stackSize() const;</h3>
			</div>
<div id="stack(int)">
<h3>BValue&amp; stack(int index);</h3>
			</div>
<div id="stack(int, BString&, BString&)">
<h3>BValue&amp; stack(int index, BString&amp; type, BString&amp; name);</h3>
			</div>
<div id="stack(int) const">
<h3>const BValue&amp; stack(int index) const;</h3>
			</div>
<div id="stack(int, BString&, BString&) const">
<h3>const BValue&amp; stack(int index, BString&amp; type, BString&amp; name) const;</h3>
			</div>
<div id="setSequence(const BExpHolderArray&)">
<h3>bool setSequence(const BExpHolderArray&amp; sequence);</h3>
<p>设置执行码序列，此序列是由脚本编辑生成的。通常需要预编译好执行码并保存为文件，在需要执行时载入执行码序列并执行。需要注意，通常加载执行码序列后，不会立即进行链接即脚本处于未链接状态。在开始运行时会自动进行链接。</p>
			</div>
<div id="sequence() const">
<h3>const BExpHolderArray&amp; sequence() const;</h3>
<p>设置执行码序列，此序列是由脚本编辑生成的。</p>
			</div>
<div id="BObject::query;()">
<h3>using BObject::query;</h3>
			</div>
<div id="query(const BString&, BValue&) const">
<h3>virtual bool query(const BString&amp; text, BValue&amp; value) const;</h3>
			</div>
		</div>
	</body>
</html>